<?php

/**
 * 說明 : 使用 Intervention\Image 處理圖片
 * 
 * 設定 : 
 *
 *      linux
 *          sudo apt-get install php-imagick
 *
 * 使用方法 : 
 *
 *      根據寬縮圖
 *          use FS\Library\Image;
 *          $image = new Image();
 *          $image->resizeByWidth($temp_file_path, 1000, $big_file_path);
 *          $image = null;
 *
 */

namespace FS\Library;

use Intervention\Image\ImageManager;


class Image
{

    private $manager;

    // 初始化
    // ------------------------------------------------------------
    function __construct() {

        // 選擇php圖片處理工具
        $this->manager = new ImageManager(array('driver' => 'imagick'));

    }

    // 
    // ------------------------
    function __destruct( ) {

        $this->manager = null;
    }

    // 根據寬縮圖
    // -------------------------------------------------------------------------------------------------
    public function resizeByWidth( $original_file_path, $width, $done_file_path ) {

        // 原圖位置
        $image = $this->manager->make($original_file_path);

        // 如果原圖比指定的寬還大，才縮圖
        if($image->width()>$width){

            // 高根據指定寬的比例自動縮放
            $image->resize($width, null, function ($constraint) {
                $constraint->aspectRatio();
            });
        }

        // 壓縮品質 90 存到指定位置
        $image->save($done_file_path,90);

        $image = null;
    }


    // 縮成正方形
    // -------------------------------------------------------------------------------------------------
    public function square( $original_file_path, $width, $done_file_path ) {

        // 原圖位置
        $image = $this->manager->make($original_file_path);

        $image->fit($width);

        // 壓縮品質 90 存到指定位置
        $image->save($done_file_path,90);

        $image = null;

    }

    // 縮成指定的寬高
    // -------------------------------------------------------------------------------------------------
    public function resizeByFit( $original_file_path, $done_file_path, $max_w, $max_h, $quality=90 ) {

        // 原圖位置
        $image = $this->manager->make($original_file_path);

        $image->fit($max_w, $max_h);

        // 壓縮品質 ? 存到指定位置
        $image->save($done_file_path,$quality);

        $image = null;
    }

}

